home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
9-Digit Zip Code Directory
/
9-Digit Zip Code Directory (American Business Information) (ABIZIP-12).ISO
/
z4src.zip
/
ZIWINDOW.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1995-09-20
|
34KB
|
1,170 lines
//----------------------------------------------------------------------------
// MODULE DESCRIPTION
//
// Module: zn.cpp
// Title: Zinc Window Template
// Notice: John M. Weeder
// Copyright (c) 1993. All rights reserved.
// This module contains proprietary information and should be
// treated as confidential.
//
//----------------------------------------------------------------------------
// MAINTENANCE HISTORY
//
// $Workfile$
// $Revision$
// $Author$
// $Date$
// $Log$
//
//----------------------------------------------------------------------------
// MODULE NARRATIVE
//
// This module contains code for the class ZI_WINDOW.
//
// The code in this module may be written in C++ or C.
//
// This module is portable to:
// DOS 3.X+
// MS Windows 3.X+
// OS/2 2.X+
// OS/2 2.0 PM
//
// The following compilers are supported:
// MSC 6.0A
// MSC/C++ 7.0
// Borland C++ 3.1 for DOS
// Borland C++ 1.0 for OS/2 2.X
//
//----------------------------------------------------------------------------
#include <zi.hpp>
#define USE_WIN_MAIN
#if OS_DOS
#include <zid.hpp>
#elif OS_WINDOWS
#include <ziw.hpp>
#else
#include <zio.hpp>
#endif
//----------------------------------------------------------------------------
//
//----------------------------------------------------------------------------
PZI_CANCEL ZI_WINDOW::pzi_cancel = NULL;
BOOL ZI_WINDOW::fAbort = FALSE;
//----------------------------------------------------------------------------
// Description: Default constructor
// Parameters:
// Returns:
//----------------------------------------------------------------------------
FN_M ZI_WINDOW::ZI_WINDOW() :
ZN_WINDOW(ZiMainWindow(), ZN_LOAD_CENTER|ZN_LOAD_HELPBAR|ZN_LOAD_NO_SHOW)
{
ZI_WINDOW::Initialize(CL_INIT_CLASS);
Setup();
}
//----------------------------------------------------------------------------
// Description: Destructor
// Parameters:
// Returns:
//----------------------------------------------------------------------------
FN_M ZI_WINDOW::~ZI_WINDOW()
{
ZI_WINDOW::Destroy(FALSE);
Terminate();
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Abbrev()
{
if (!CheckCounter())
return FALSE;
PZI_ABBREV pzi_abbrev = new ZI_ABBREV;
if (pzi_abbrev == NULL)
return ErrorNoMem();
else if (pzi_abbrev->IsValid())
pzi_abbrev->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::CheckCounter()
{
if (lRecordCount <= 0)
{
PZI_COUNTER pzi_counter = new ZI_COUNTER;
if (pzi_counter == NULL)
return ErrorNoMem();
else if (pzi_counter->IsValid())
pzi_counter->Show();
return FALSE;
}
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::Clear(BOOL fInput, BOOL fOutput)
{
if (fOutput)
{
SetString(FID(STR_RESULT1));
SetString(FID(STR_RESULT2));
SetString(FID(STR_RESULT3));
SetString(FID(STR_RESULT4), "Enter address and select Search.");
SetString(FID(STR_OUTPUT_ADDR2));
SetString(FID(STR_OUTPUT_LL));
strcpy(szResults,
"Enter an address, then select the 'Search' button. "
"A city and state, 5 digit ZIP code, 9 digit ZIP code, or "
"full address may be entered.\r\n");
LoadIconBitmap(FID(ICON_MAILBOX), "MAILBOX");
z4_inq.std.szAddress[0] = '\0';
}
if (fInput)
{
// SetString(FID(STR_INPUT_ADDR1));
SetString(FID(STR_INPUT_ADDR2));
SetString(FID(STR_INPUT_CITY));
SetString(FID(STR_INPUT_ST));
SetString(FID(STR_INPUT_ZIP));
}
SetCurrent(FID(STR_INPUT_ADDR2));
return ;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Configure()
{
PZI_CONFIG pzi_config = new ZI_CONFIG;
if (pzi_config == NULL)
return ErrorNoMem();
else if (pzi_config->IsValid())
pzi_config->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Display city/state list
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::CS()
{
if (!CheckCounter())
return FALSE;
Get();
z4_inq.parse.LastLine(z4_inq.szZip, z4_inq.szCity, z4_inq.szState);
PZI_CS pzi_cs = new ZI_CS(z4_inq.parse.state, z4_inq.parse.szCity);
if (pzi_cs == NULL)
return ErrorNoMem();
else if (pzi_cs->IsValid())
pzi_cs->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Display city/state list
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::CX()
{
if (!CheckCounter())
return FALSE;
Get();
z4_inq.parse.LastLine(z4_inq.szZip, z4_inq.szCity, z4_inq.szState);
PZI_CX pzi_cx = new ZI_CX(z4_inq.parse.state, z4_inq.parse.szCity);
if (pzi_cx == NULL)
return ErrorNoMem();
else if (pzi_cx->IsValid())
pzi_cx->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Destroy object. Free any resources used by object.
// Normally called by destructor.
// Should allow multiple calls from various classes.
// A class should almost always re-init its variables when
// it is destroyed to prevent accidents.
// Parameters: fDestroyAll Destroy parents also?
// Default is TRUE.
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Destroy(BOOL fDestroyAll)
{
z4_inq.Destroy(); // Close inquiry class
ZI_WINDOW::Initialize(CL_INIT_CLASS_VARS);
if (fDestroyAll) // Destroy parent.
ZI_WINDOW_PARENT::Destroy(fDestroyAll);
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Expert()
{
PZI_EXPERT pzi_expert = new ZI_EXPERT;
if (pzi_expert == NULL)
return ErrorNoMem();
else if (pzi_expert->IsValid())
pzi_expert->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::Flags()
{
if (z4_inq.fZip5Changed)
{
strcat(szResults, "The 5 digit ZIP code was added or corrected.\r\n");
}
if (z4_inq.fCSChanged)
{
strcat(szResults, "The city/state was added or corrected.\r\n");
}
if (z4_inq.fAddrChanged)
{
strcat(szResults, "The address line was corrected (standardized).\r\n");
}
if (z4_inq.fBetterAvailable)
{
strcat(szResults,
"A better record may be available by entering a BOX number "
"or by entering the building or business name.\r\n");
}
if (z4_inq.fNonDeliverable)
{
strcat(szResults,
"The address was verified, but the United States Postal Service "
"does not deliver mail to the specified address.\r\n");
}
if (z4_inq.fFacilityOther)
{
strcat(szResults,
"The city name was not acceptable for use on mail, "
"the city name of the main post office was substituted.\r\n");
}
if (z4_inq.fNoPrimary)
{
strcat(szResults,
"No street or box number was entered, or it is invalid. "
"All records with the input street name were selected.\r\n");
}
if (z4_inq.fSecAvail)
{
strcat(szResults,
"Secondary delivery points are available at this address (APT/BOX/etc..). "
"A better ZIP+4 may be obtained by entering a valid secondary number.\r\n");
}
if (z4_inq.fInvSec)
{
strcat(szResults,
"The input secondary number (APT/BOX/etc...) was invalid.)\r\n");
}
if (z4_inq.fInvZip4)
{
strcat(szResults, "An invalid ZIP+4 code was entered.\r\n");
}
if (z4_inq.fInvCity)
{
strcat(szResults, "An unrecognized or blank city name was entered.\r\n");
}
if (z4_inq.fInvState)
{
strcat(szResults, "An invalid state code was entered.\r\n");
}
if (z4_inq.fInvZip5)
{
strcat(szResults, "An invalid 5 digit ZIP code was entered.\r\n");
}
if (z4_inq.fStackOverFlow)
{
strcat(szResults,
"A large number of potential matching records were found. "
"Not all matches are available for viewing.\r\n");
}
Assert(strlen(szResults) < sizeof(szResults));
return ;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns:
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Get()
{
PCSZ pcszCity = strskipws(GetString(FID(STR_INPUT_CITY)));
PCSZ pcszState = strskipws(GetString(FID(STR_INPUT_ST)));
PCSZ pcszZip = strskipws(GetString(FID(STR_INPUT_ZIP)));
PCSZ pcszAddr1 = NULL;
PCSZ pcszAddr2 = strskipws(GetString(FID(STR_INPUT_ADDR2)));
z4_inq.Set(pcszCity, pcszState, pcszZip, pcszAddr1, pcszAddr2);
return pcszCity[0] || pcszState[0] || pcszZip[0] || pcszAddr2[0];
}
//----------------------------------------------------------------------------
// Description: Display help bar text for the current help context.
// Parameters:
// Returns:
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::Help(ZN_HELP help, PSZ psz)
{
static ZN_HELPMAP aHelpMap[] =
{
{ HELP_ADDR_INPUT , "Enter an address." },
{ HELP_CITY_INPUT , "Enter a city name." },
{ HELP_ST_INPUT , "Enter a valid state code." },
{ HELP_ZIP_INPUT , "Enter a 5 or 9 digit ZIP code." },
{ HELP_MAIN_SEARCH , "Search for an address." },
{ HELP_MAIN_MESSAGES, "View additional search information." },
{ HELP_MAIN_COPY , "Copy standardized address to clipboard." },
{ HELP_MAIN_CLEAR , "Clear input and output fields." },
{ HELP_TOOL_CITY , "View city name list." },
{ HELP_TOOL_ST , "View state list." },
{ HELP_TOOL_HELP , "View help index." },
{ HELP_TOOL_PRODUCTS, "View additional product information." },
{ 0, NULL }
};
ZN_WINDOW::Help(aHelpMap, help, psz);
return;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::HelpIndex()
{
PZI_HELP pzi_help = new ZI_HELP;
if (pzi_help == NULL)
return ErrorNoMem();
else if (pzi_help->IsValid())
pzi_help->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Initialize object.
// Normally called by constructor.
// Should allow multiple calls from various classes.
// Parameters: sInit Initialization code. May be one of the following:
// CL_INIT_CLASS Reset class variables and
// and dynamic allocations for
// this class only.
// CL_INIT_CLASS_VARS Reset class variables for
// this class only.
// CL_INIT_VARS Reset class variables for
// this class only.
// CL_INIT_ALL Initialize class and all
// parent class, including
// dynamic memory allocation.
// Default is CL_INIT_ALL
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Initialize(SHORT sInit)
{
if (sInit == CL_INIT_VARS || sInit == CL_INIT_ALL)
ZI_WINDOW_PARENT::Initialize(sInit);
lRecordCount = 0;
z4_inq.pfnzip4 = Z4Callback;
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns:
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::Inquiry()
{
if (!CheckCounter())
return ;
Clear(FALSE,TRUE);
if (!Get()) // Make sure something has been input
return ;
SetString(FID(STR_RESULT3));
SetString(FID(STR_RESULT4), "Searching...");
SetMouse(MOUSE_HOURGLASS);
fAbort = FALSE;
pzi_cancel = new ZI_CANCEL;
BOOL fInquiry = z4_inq.Inquiry();
if (pzi_cancel)
{
pzi_cancel->Close();
Process();
}
SetCurrent(FID(STR_INPUT_ADDR2));
SetMouse();
if (!fInquiry // Perform the inquiry
|| (z4_inq.result != Z4_RESULT_EXACT
&& z4_inq.result != Z4_RESULT_MULTI))
{
SetResults();
return ;
}
LoadIconBitmap(FID(ICON_MAILBOX), "MAILBOX2");
if (z4_inq.match.cRecords > 1 && z4_inq.result == Z4_RESULT_MULTI)
{
SetString(FID(STR_RESULT4), "Multiple responses.");
SHORT sResult = ZincMessageBox("Multiple Records Matched",
ZN_MBOX_OKCANCEL,
"Multiple records were found which were similar to the input. "
"Select the OK button to view the records. The INQUIRY count "
"will decrease by one. "
"Select Cancel to return to the main screen.");
strcpy(szResults,
"Multiple records were found which were similar to the input. "
"The inquiry was cancelled.");
//
// This is the default message in case the user aborts
//
if (sResult != ZN_MID_OK)
{
SetString(FID(STR_RESULT3), "Inquiry cancelled by user.");
SetString(FID(STR_RESULT4));
return ;
}
strcpy(szResults,
"Multiple records were found which were similar to the input. "
"None of the choices were selected.");
Multiple();
}
else
SetResults();
User(ZI_MSG_CLICK); // Remove one click from the meter
SetCurrent(FID(STR_INPUT_ADDR2));
return ;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::More()
{
PZI_MORE pzi_more = new ZI_MORE;
if (pzi_more == NULL)
return ErrorNoMem();
else if (pzi_more->IsValid())
{
pzi_more->Show();
return !pzi_more->IsError();
}
return FALSE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Multiple()
{
SetString(FID(STR_RESULT3), "Multiple responses.");
SetString(FID(STR_RESULT4), "See messages.");
switch (z4_inq.request)
{
case Z4_RQ_CS:
PZI_Z5_LIST pzi_z5_list = new ZI_Z5_LIST(z4_inq.cx.cZip5, &z4_inq.cx.abZip5[0][0]);
if (pzi_z5_list == NULL)
{
ErrorNoMem();
return FALSE;
}
else if (pzi_z5_list->IsValid())
{
CHAR szFormat[81];
sprintf(szFormat, "%s, %s",
z4_inq.cx.szCity, Z4_ST_FILE::Abbreviation(z4_inq.cx.state));
pzi_z5_list->SetTitle(szFormat);
pzi_z5_list->Show();
}
break;
case Z4_RQ_Z5:
PZI_CX_LIST pzi_cx_list = new ZI_CX_LIST(z4_inq.match.cRecords, z4_inq.match.arecid);
if (pzi_cx_list == NULL)
{
ErrorNoMem();
return FALSE;
}
else if (pzi_cx_list->IsValid())
pzi_cx_list->Show();
break;
case Z4_RQ_ZX:
case Z4_RQ_Z4:
PZI_Z4_LIST pzi_z4_list = new ZI_Z4_LIST(z4_inq.match.cRecords, z4_inq.match.arecid);
if (pzi_z4_list == NULL)
{
ErrorNoMem();
return FALSE;
}
else if (pzi_z4_list->IsValid())
pzi_z4_list->Show();
break;
}
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Parse()
{
PZI_PARSE pzi_parse = new ZI_PARSE(&z4_inq.parse);
if (pzi_parse == NULL)
return ErrorNoMem();
else if (pzi_parse->IsValid())
pzi_parse->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::RecordCount(BOOL fRead)
{
static PCSZ pcszName = "RECORD_COUNT";
CL_PARM cl_parm;
cl_parm.SetName(pcszName);
if (fRead)
{
if (!cl_parm.Get(NULL, pcszName))
return FALSE;
lRecordCount = MAX(0, (LONG)cl_parm);
}
CHAR szFormat[40];
sprintf(szFormat, "%ld INQUIRIES", lRecordCount);
SetPrompt(FID(PROMPT_INQURIES), szFormat);
if (!fRead)
{
cl_parm = lRecordCount;
if (!cl_parm.Set(pcszName))
return FALSE;
}
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Results()
{
PZI_RESULT pzi_result = new ZI_RESULT(szResults);
if (pzi_result == NULL)
return ErrorNoMem();
else if (pzi_result->IsValid())
pzi_result->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns:
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::SetResults()
{
szResults[0] = '\0';
if (z4_inq.result == Z4_RESULT_FAILURE)
{
SetString(FID(STR_RESULT3), "Inquiry not possible.");
SetString(FID(STR_RESULT4), "See messages.");
strcat(szResults,
"An internal application error has occurred.\r\n"
"Please verify that this product is installed correctly.\r\n");
}
else if (z4_inq.result == Z4_RESULT_ABORT)
{
SetString(FID(STR_RESULT3), "Inquiry cancelled by user.");
SetString(FID(STR_RESULT4));
strcat(szResults, "The inquiry was cancelled by the user.");
}
else if (z4_inq.result == Z4_RESULT_NOT_FOUND)
{
SetString(FID(STR_RESULT3), "Not found.");
SetString(FID(STR_RESULT4), "See messages.");
strcat(szResults,
"The inquiry could not be found.\r\n"
"Enter a more complete address and search again.\r\n");
}
else if (z4_inq.result == Z4_RESULT_INV_ST)
{
SetString(FID(STR_RESULT3), "Invalid state.");
SetString(FID(STR_RESULT4), "See messages.");
strcat(szResults,
"An invalid state was specified or no state was specified.\r\n"
"Enter a valid state and search again.\r\n");
SetCurrent(FID(STR_INPUT_ST));
}
else if (z4_inq.result == Z4_RESULT_INV_CITY)
{
SetString(FID(STR_RESULT3), "Invalid city.");
SetString(FID(STR_RESULT4), "See messages.");
strcat(szResults,
"No matching city names were found.\r\n"
"Enter a valid city name and search again.\r\n");
SetCurrent(FID(STR_INPUT_CITY));
}
else if (z4_inq.result == Z4_RESULT_INV_CSZ)
{
SetString(FID(STR_RESULT3), "Invalid City/State or ZIP.");
SetString(FID(STR_RESULT4), "See messages.");
strcat(szResults,
"Enter a valid city/state or ZIP code and search again.\r\n");
SetCurrent(FID(STR_INPUT_CITY));
}
else
{
strcpy(szResults, "Inquiry successful.");
SetString(FID(STR_RESULT3), "Inquiry successful.");
SetString(FID(STR_RESULT4));
SetString(FID(STR_OUTPUT_ADDR2), z4_inq.std.szAddr2);
SetString(FID(STR_OUTPUT_LL), z4_inq.std.szLastLine);
switch (z4_inq.request)
{
case Z4_RQ_CS:
SetResultsCS();
break;
case Z4_RQ_Z4:
SetResultsZ4();
break;
case Z4_RQ_Z5:
SetResultsZ5();
break;
case Z4_RQ_ZX:
SetResultsZX();
break;
}
}
Flags();
return ;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns:
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::SetResultsCS()
{
PCSZ pcszCity = z4_inq.cx.szCity;
PCSZ pcszState = Z4_ST_FILE::Abbreviation(z4_inq.cx.state);
PCSZ pcszZip5 = z4_inq.std.szZip5;
CHAR szFormat[81];
sprintf(szFormat, "%s, %s is in ZIP:", pcszCity, pcszState);
SetString(FID(STR_RESULT1), szFormat);
SetString(FID(STR_RESULT2), pcszZip5);
if (z4_inq.result == Z4_RESULT_EXACT)
{
sprintf(szResults,
"An exact match was made to %s, %s in ZIP code %s.\r\n",
pcszCity, pcszState, pcszZip5);
SetString(FID(STR_RESULT3), "Exact match.");
SetString(FID(STR_RESULT4));
}
else
{
sprintf(szResults,
"%u ZIP codes were found in %s, %s.\r\n"
"ZIP code %s was selected.\r\n",
z4_inq.match.cRecords, pcszCity, pcszState, pcszZip5);
SetString(FID(STR_RESULT3), "Multiple response.");
SetString(FID(STR_RESULT4), "See messages.");
}
return ;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns:
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::SetResultsZ4()
{
if (z4_inq.result == Z4_RESULT_EXACT)
{
sprintf(szResults, "An exact match was made.\r\n");
SetString(FID(STR_RESULT3), "Exact match.");
SetString(FID(STR_RESULT4));
}
else
{
sprintf(szResults,
"%u records were found which matched your input. "
"A single record was selected.\r\n",
z4_inq.match.cRecords);
SetString(FID(STR_RESULT3), "Multiple response.");
SetString(FID(STR_RESULT4), "See messages.");
}
#if 0
if (z4_inq.match.rec[Z4_REC_BEST].z4.szCris[0] && !z4_inq.fNonDeliverable)
{
sprintf(strchr(szResults, '\0'),
"The carrier route for this address is %s.\r\n",
z4_inq.match.rec[Z4_REC_BEST].z4.szCris);
}
#endif
if (!z4_inq.std.szZip4[0])
{
CHAR szFormat[81];
sprintf(szFormat, "The correct ZIP code is:");
SetString(FID(STR_RESULT1), szFormat);
SetString(FID(STR_RESULT2), z4_inq.std.szZip5);
}
else
{
CHAR szFormat[81];
sprintf(szFormat, "The correct ZIP+4 is:");
SetString(FID(STR_RESULT1), szFormat);
SetString(FID(STR_RESULT2), z4_inq.std.szZip4);
}
return ;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns:
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::SetResultsZ5()
{
PCSZ pcszCity = z4_inq.cs.szCity;
PCSZ pcszState = Z4_ST_FILE::Abbreviation(z4_inq.cs.state);
PCSZ pcszZip5 = z4_inq.std.szZip5;
CHAR szFormat[81];
sprintf(szFormat, "%s, %s is in ZIP:", pcszCity, pcszState);
SetString(FID(STR_RESULT1), szFormat);
SetString(FID(STR_RESULT2), pcszZip5);
if (z4_inq.result == Z4_RESULT_EXACT)
{
sprintf(szResults,
"An exact match to %s, %s in ZIP code %s was made.\r\n",
pcszCity, pcszState, pcszZip5);
SetString(FID(STR_RESULT3), "Exact match.");
SetString(FID(STR_RESULT4));
}
else
{
sprintf(szResults,
"%u city names were found in ZIP code %s.\r\n"
"%s, %s was selected.\r\n",
z4_inq.match.cRecords, pcszZip5, pcszCity, pcszState);
SetString(FID(STR_RESULT3), "Multiple response.");
SetString(FID(STR_RESULT4), "See messages.");
}
return ;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns:
//----------------------------------------------------------------------------
VOID FN_M ZI_WINDOW::SetResultsZX()
{
if (z4_inq.result == Z4_RESULT_EXACT)
{
sprintf(szResults,
"An exact match was made to ZIP+4 code %s.\r\n", z4_inq.std.szZip4);
SetString(FID(STR_RESULT3), "Exact match.");
SetString(FID(STR_RESULT4));
}
else
{
sprintf(szResults,
"%u records were found with ZIP+4 code %s.\r\n"
"A single record was selected.\r\n",
z4_inq.match.cRecords, z4_inq.std.szZip4);
SetString(FID(STR_RESULT3), "Multiple response.");
SetString(FID(STR_RESULT4), "See messages.");
}
return ;
}
//----------------------------------------------------------------------------
// Description: Display city/state list
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::State()
{
if (!CheckCounter())
return FALSE;
Get();
z4_inq.parse.LastLine(z4_inq.szZip, z4_inq.szCity, z4_inq.szState);
PZI_ST pzi_st = new ZI_ST(z4_inq.parse.state);
if (pzi_st == NULL)
return ErrorNoMem();
else if (pzi_st->IsValid())
pzi_st->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Subscribe()
{
PZI_SUBSCRIBE pzi_subscribe = new ZI_SUBSCRIBE;
if (pzi_subscribe == NULL)
return ErrorNoMem();
else if (pzi_subscribe->IsValid())
pzi_subscribe->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Event monitor function.
// Parameters: msg Event code
// pv1 Data pointer 1
// pv2 Data pointer 2
// Returns: Event code
//----------------------------------------------------------------------------
ZN_MSG FN_M ZI_WINDOW::User(ZN_MSG msg, PVOID pv1, PVOID pv2)
{
switch (msg)
{
case ZN_MSG_INIT:
RecordCount(TRUE);
// Also sets OWNERDRAW for right justify under windows
SetStringColor(FID(STR_RESULT1), ZN_CLR_BLACK);
SetStringColor(FID(STR_RESULT2), ZN_CLR_RED);
SetStringColor(FID(STR_RESULT4), ZN_CLR_LIGHTBLUE);
Clear();
return msg;
case ZN_MSG_TERMINATE:
return msg;
}
if (IsError()) // Error condition
return msg;
switch (msg)
{
case ZN_MSG_HELP:
Help((ZN_HELP)(LONG)pv1, (PSZ)pv2);
break;
case BUTTON_CLEAR:
case MENU_EDIT_CLEAR:
Clear();
break;
case BUTTON_SEARCH:
Inquiry();
break;
case BUTTON_COPY:
Paste(z4_inq.std.szAddress);
break;
case BUTTON_RESULTS:
Results();
break;
case ZI_MSG_ADDR:
// SetString(FID(STR_INPUT_ADDR1), (PSZ)pv1);
SetString(FID(STR_INPUT_ADDR2), (PSZ)pv2);
break;
case ZI_MSG_STATE:
SetString(FID(STR_INPUT_ST), (PSZ)pv2);
break;
case ZI_MSG_CITY:
SetString(FID(STR_INPUT_CITY), (PSZ)pv2);
break;
case ZI_MSG_ZIP5:
SetString(FID(STR_INPUT_ZIP), (PSZ)pv2);
break;
case MENU_EDIT:
ExitRequest();
break;
case MENU_FILE_CONFIGURE:
Configure();
break;
case MENU_SUBSCRIBE:
Subscribe();
break;
case MENU_FILE_EXIT:
ExitRequest();
break;
case ZI_MSG_CLICK:
lRecordCount = MAX(0, lRecordCount - 1);
RecordCount();
break;
case ZI_MSG_RECORD:
RecordCount(TRUE);
break;
case ZI_MSG_SELECT:
z4_inq.Select((SIZET)pv1);
SetResults();
break;
case TB_HELP:
if (DebugMode())
{
Expert(); // Display expert (debugging) menu window
break;
}
// Else fall through
case MENU_HELP_INDEX:
HelpIndex();
break;
case ZI_MSG_ABORT:
fAbort = TRUE;
break;
case TB_PRODUCTS:
case MENU_OTHER:
More();
break;
case ZI_MSG_ST:
case MENU_VIEW_STATES:
case TB_STATES:
State();
break;
case ZI_MSG_AB:
case MENU_VIEW_ABBR:
Abbrev();
break;
case ZI_MSG_Z5:
Z5();
break;
case ZI_MSG_Z4:
Z4();
break;
case ZI_MSG_ZX:
ZX();
break;
case ZI_MSG_PARSE:
Parse();
break;
case ZI_MSG_INIT:
z4_inq.Destroy(); // Close data files
// Re-initialize and open data files
if (!Z4_INQ::Start(Z4_INQ_REINIT|Z4_INQ_ALL))
{
Error("There is a problem accessing the data files.\n"
"Verify that the program is configured correctly.");
}
break;
case MENU_VIEW_CITIES:
case TB_CITIES:
case ZI_MSG_CX:
CX();
break;
case ZI_MSG_CS:
CS();
break;
case ZI_MSG_PF:
NotDone();
break;
}
return msg;
}
//----------------------------------------------------------------------------
// Description: Display city/state list
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Z4()
{
if (!CheckCounter())
return FALSE;
PZI_Z4 pzi_z4 = new ZI_Z4();
if (pzi_z4 == NULL)
return ErrorNoMem();
else if (pzi_z4->IsValid())
pzi_z4->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL _LOADDS_ FN_M ZI_WINDOW::Z4Callback(SHORT sDone)
{
if (pzi_cancel)
pzi_cancel->NextBitmap(sDone ? 99: -1);
ZI_WINDOW::Process();
return !fAbort;
}
//----------------------------------------------------------------------------
// Description: Display city/state list
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::Z5()
{
if (!CheckCounter())
return FALSE;
Get();
z4_inq.parse.LastLine(z4_inq.szZip, z4_inq.szCity, z4_inq.szState);
PZI_Z5 pzi_z5 = new ZI_Z5(z4_inq.parse.szZip5);
if (pzi_z5 == NULL)
return ErrorNoMem();
else if (pzi_z5->IsValid())
pzi_z5->Show();
return TRUE;
}
//----------------------------------------------------------------------------
// Description: Display city/state list
// Parameters:
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
BOOL FN_M ZI_WINDOW::ZX()
{
if (!CheckCounter())
return FALSE;
Get();
z4_inq.parse.LastLine(z4_inq.szZip, z4_inq.szCity, z4_inq.szState);
CHAR szZip4[MAX_ZIP4+1];
if (z4_inq.parse.szZip5[0])
{
strcpy(szZip4, z4_inq.parse.szZip5);
if (z4_inq.parse.szAddon[0])
strcat(szZip4, z4_inq.parse.szAddon);
else
strcat(szZip4, "0000");
}
else
szZip4[0] = '\0';
PZI_ZX pzi_zx = new ZI_ZX(szZip4);;
if (pzi_zx == NULL)
return ErrorNoMem();
else if (pzi_zx->IsValid())
pzi_zx->Show();
return TRUE;
}
//----------------------------------------------------------------------------
//------------------------------- End of File --------------------------------
//----------------------------------------------------------------------------